Error correction system for five or more errors

ABSTRACT

An error correcting system for correcting “t” errors over GF(2 m ), where t is even and preferably greater than or equal to six, transforms the t-degree error locator polynomial c(x) into a polynomial t(x) in which a t−1 ≈0, where a i  is the coefficient of the x i  term of the error locator polynomial and Tr(a t−1 )=1, where Tr(a i ) is the trace of a i . The polynomial t(x) is factored into two factors, namely, one factor that is the greatest common divisor of t(x) and            S        (   x   )       =       ∑     i   =   0       m   -   1            x     2   i           ,                   
     and a second factor that is the greatest common divisor of t(x) and S(x)+1. The system determines the greatest common divisor of the polynomial and S(x) in two steps, first iteratively determining a residue R(x)≡S(x)mod t(x), and then calculating the greatest common divisor of t(x) and the lower-degree R(x). The system produces two factors of t(x), namely, g(x)=gcd(t(x), R(x)) and            h        (   x   )       =       t        (   x   )         g        (   x   )           ,                   
     and then determines the roots of the factors and transforms these roots into the roots of the error locator polynomial or, as necessary, continues factoring into factors of lower degree before determining the roots. When “t” is odd, the system represents the roots r i  of the error locator polynomial as a linear combination of r i,k β k  for k=0,1 . . . m−1, where r i,k εGF(2) and β k  is an element of a dual basis for GF(2 m ) over GF(2), and Tr(α j β k ) equals one when j=k and equals zero when jk. The rootsr i  are then 
     
       
           r   i   =r   i,0 β 0   +r   i,1 β 1   + . . . +r   i,m−1 β m−1   
       
     
     and          Tr        (       α   j          r   i       )       =         ∑     k   =   0       m   -   1              r     i   ,   k            Tr        (       α   j          β   k       )           =     r     i   ,   j                         
     The system next determines the greatest common divisor of the polynomial and S(α j x) by iteratively determining R j (x)≡S(α j x)mod c(x), and then determining the greatest common divisor of c(x) and R j (x). The system next determines two factors of c(x) as g(x)=gcd(c(x), R j (x)) and          h        (   x   )       =       t        (   x   )         g        (   x   )                         
     and finds the roots of the two factors.

FIELD OF THE INVENTION

This invention relates generally to data processing systems and, moreparticularly, to a system for decoding and correcting errors in datausing an error correction code.

BACKGROUND OF THE INVENTION

Data stored on magnetic media, such as a magnetic disks, are typicallystored in encoded form, so that errors in the stored data can possiblybe corrected. The errors may occur, for example, because of inter-symbolinterference, a defect in the disk, or noise. As the density of the datastored on the disk increases, more errors are likely, and the system isthus required to correct greater numbers of errors, which includegreater numbers of burst errors. The speed with which the systemcorrects the errors is important to the overall speed with which thesystem processes the data.

Prior to recording, multiple-bit data symbols are encoded using an errorcorrection code (ECC). When the data symbols are retrieved from the diskand demodulated, the ECC is employed to, as the name implies, correctthe erroneous data.

Specifically, before a string of k data symbols is written to a disk, itis mathematically encoded using an (n, k) ECC to form n-k ECC symbols.The ECC symbols are then appended to the data string to form an n-symbolerror correction code word, which is then written to, or stored, on thedisk. When the data are read from the disk, the code words containingthe data symbols and ECC symbols are retrieved and mathematicallydecoded. During decoding, errors in the data are detected and, ifpossible, corrected through manipulation of the ECC symbols [for adetailed description of decoding see, Peterson and Weldon, ErrorCorrection Codes, 2nd Ed. MIT Press, 1972].

To correct multiple errors in strings of data symbols, the systemtypically uses an ECC that efficiently and effectively utilizes thevarious mathematical properties of sets of symbols known as Galoisfields. Galois fields are represented “GF (P^(M))”, where “P” is a primenumber and “M” can be thought of as the number of digits, base “P”, ineach element or symbol in the field. P usually has the value 2 indigital computer and disk drive applications and, therefore, M is thenumber of bits in each symbol. The ECC's commonly used with the GaloisFields are Reed Solomon codes or BCH codes.

There are essentially four major steps in decoding a corrupted code wordof a high rate Reed-Solomon code or a BCH code. The system firstdetermines error syndromes that are based on the results of amanipulation of the ECC symbols. Next, using the error syndromes, thesystem determines an error locator polynomial, which is a polynomialthat has the same degree as the number of errors. The system then findsthe roots of the error locator polynomial and from each root determinesthe location of an associated error in the code word. Finally, thesystem finds error values for the error locations.

The steps of determining the syndromes and finding the error locationsare the most time consuming in the error correction process. Thisinvention relates to the step of finding the error locations.

“Fast” methods for finding four or fewer errors are known, and we havedeveloped a system for finding 5 errors with the aid of a relativelysmall lookup table that is discussed in co-pending patent applicationIMPROVED FIVE-ERROR CORRECTION SYSTEM, Ser. No. 08/984,698 now U.S. Pat.No. 5,978,956. However, prior known systems that find the errorlocations for error locator polynomials of degree 6 or more perform timeconsuming Chien searches. A Chien search is a systematic trial and errorapproach that involves tying each element of the applicable Galois fieldas a root of the error locator equation. If the Galois Field isrelatively large, the Chien search takes a long time, and thus, slowsthe error correction operation. An alternative to the Chien search is touse a lookup table that is entered with the 6 or more coefficients ofthe error locator polynomial. To correct even six errors, the associatedlookup table is prohibitively large since it must include all possibledistinct roots for the degree-six error locator polynomials. InGF(2^(M)) the lookup table has (2^(M))⁶ entries. For systems that use8-bit symbols, the lookup table has (2⁸)⁶ or 2⁴⁸ entries, with eachentry including six 8-bit roots of the error locator polynomial. Formany systems, the lookup table takes up too much storage space. This isparticularly true as larger Galois Fields are used to protect more data.Indeed, some systems may require that no lookup table is used.

SUMMARY OF THE INVENTION

An error correcting system for correcting “t” errors over GF(2^(m)),where t is even and preferably greater than or equal to six, transformsthe t-degree error locator polynomial into a polynomial in whicha_(t−1)≠0, where a_(i) is the coefficient of the x^(i) term of the errorlocator polynomial. As necessary, the system further transforms thepolynomial into one in which Tr(a_(t−1))≠0, where Tr(a_(i)) is the traceof a_(i) or a mapping of a_(i) to an element of GF(2). Based on thenon-zero trace of a_(t−1), there are an odd number of roots that havetraces equal to 1 and an odd number of roots that have traces equal to0, since the sum of the roots of the polynomial is equal to a_(t−1) andthe sum of the traces of the roots is equal to the trace of the sum.

The roots of the polynomial are elements of GF(2^(m)), and all elementsof GF(2^(m)) with traces equal to 0 are roots of${{S(x)} = {\sum\limits_{i = 0}^{m - 1}x^{2^{i}}}},$

and all elements with traces equal to 1 are roots of S(x)+1.Accordingly, the polynomial can be factored into two factors, namely,one factor that is the greatest common divisor of the polynomial andS(x) and a second factor that is the greatest common divisor of thepolynomial and S(x)+1. If the two factors each have degrees less than orequal four, the system uses a fast method to determine the roots of eachof the factors. The system then, as necessary, transforms these rootsinto the roots of the error locator polynomial. Otherwise, the systemcontinues factoring until the degrees of the factors are less than orequal to some desired degree before it determines the roots of thefactors.

Preferably, the system determines the greatest common divisor of thepolynomial and S(x) in two steps, first iteratively determining aresidue R(x)≡S(x)mod t(x), where t(x) is the polynomial that has theterm a_(t−1) with a trace of zero, and then calculating the greatestcommon divisor of t(x) and the lower-degree R(x). The system producestwo factors of t(x), namely, g(x)=gcd(t(x), R(x)) and${h(x)} = {\frac{t(x)}{g(x)}.}$

The system then determines the roots of the factors and transforms theseroots into the roots of the error locator polynomial or, as necessary,continues factoring into factors of lower degree before determining theroots. We discuss the iterative technique for determining R(x) in moredetail below.

When the degree of the error locator polynomial is odd, the systemrepresents the roots r_(i) of the error locator polynomial as a linearcombination of r_(i,k)β_(k) for k=0,1 . . . m−1, where r_(i,k)εGF(2) andβ_(k) is an element of a dual basis for GF(2^(m)) over GF(2). Using thedual basis, Tr(α^(j)β_(k))=1 when j=k and equals 0 otherwise. The rootsr_(i) are then

r _(i) =r _(i,0)β₀ +r _(i,1)β₁ + . . . +r _(i,m−1)β_(m−1)

and${{Tr}( {\alpha^{j}r_{i}} )} = {{\sum\limits_{k = 0}^{m - 1}{r_{i,k}{{Tr}( {\alpha^{j}\beta_{k}} )}}} = r_{i,j}}$

The system determines a value for j for which the traces of the rootsare not all zero or all one. The greatest common divisor of the errorlocator polynomial and S(α^(j)x) then has a degree less than t, as doesthe greatest common divisor of the error locator polynomial andS(α^(j)x)+1. The system next determines the greatest common divisor ofthe polynomial and S(α^(i)x) by iteratively determiningR_(j)(x)≡S(α^(j)x)mod c(x), where c(x) is the error locator polynomial,and then determining the greatest common divisor of c(x) and R_(j)(x).If the degree of R_(j)≧1, the divisor is also a non-trivial factor ofc(x). The system next determines two factors of c(x) as g(x)=gcd(c(x),R_(j)(x)) and ${h(x)} = \frac{t(x)}{g(x)}$

and finds the roots as discussed above. We discuss the iterativetechnique for determining R_(j)(x) in more detail below.

BRIEF DESCRIPTION OF THE DRAWINGS

The invention description below refers to the accompanying drawings, ofwhich:

FIG. 1 is a flow chart of the operations of determining the roots of aneven-degree error locator polynomial;

FIG. 2 is a flow chart of the operations of the system for determining aresidue;

FIG. 3 is a functional block diagram of a circuit for iterativelydetermining coefficient of the residue used by the system of FIG. 2;

FIG. 4 is a flow chart of the operations of the system for determiningthe roots of an odd-degree error locator polynomial;

FIG. 5 is a functional block diagram of a circuit for iterativelydetermining the coefficients of a residue used by the system of FIG. 4;and

FIG. 6 is a flow chart of the operations of the system that includesteps of iteratively determining residues.

DETAILED DESCRIPTION OF AN ILLUSTRATIVE EMBODIMENT

An error correction system operating in accordance with the currentinvention produces in a known manner as error locator polynomial

c(x)=a _(t) x ^(t) +a _(t−1) x ^(t−1) + . . . +a _(t−2) x ^(t−2) + . . .a ₁ x+a ₀

over GF(2^(m)). If the degree t of the error locator polynomial is smallenough, the system uses known fast methods to find the roots. Generally,the known fast methods find the roots of polynomials of degree 4 orless. If the degree t≧5, the system follows the operations of FIG. 1, ift is even, or FIG. 4 if t is odd.

A. Even-degree Error Locator Polynomial

Referring now to FIG. 1 if t is even (step 100), the system checks ifa_(t−1)=0 (step 102). If so, the system transforms c(x) into c₁(x) witha_(t−1)=1 (step 104). Otherwise, the system goes on to step 106.

As an example, c(x) is a degree 6 polynomial

c(x)=x ⁶ +a ₅ x ⁵ +a ₄ x ⁴ +a ₃ x ³ +a ₂ x ² +a ₁ x+a ₀

with a₅=0. In order for c(x) to have t distinct, non-zero roots, a₀≠0.Further, at least one of a₁ and a₃ must be non-zero. Otherwise, c(x) isthe square of a degree 3 polynomial. To transform c(x) into c₁(x) witha₅≠0, the system first checks that a₁ is non-zero. If so, the systemproduces${c_{1}(x)} = {{\frac{1}{a_{0}}x^{6}{c( \frac{1}{x} )}} = {x^{6} + {\frac{a_{1}}{a_{0}}x^{5}} + {\frac{a_{2}}{a_{0}}x^{4}} + {\frac{a_{3}}{a_{0}}x^{3}} + {\frac{a_{4}}{a_{0}}x^{2}} + \frac{1}{a_{0}}}}$

such that for each root r_(i) of c₁(x), $\frac{1}{r_{i}}$

is a root of c(x).

When a₁=0, the system checks if c(1)=0 and if so it directly factorsc(x) into g(x)=x−1 and ${{h(x)} = \frac{c(x)}{g(x)}},$

which are, respectively, degree 1 and degree 5 polynomials. The systemmay then use a look-up table to determine the roots of h(x) or it mayfactor h(x) in accordance with the operations discussed below withreference to FIG. 4.

With a₁=0 and c(1)≠0, the system transforms c(x) into c₀(x)=c(x+1):

c ₀(x)=x ⁶+(a ₄+1)x ⁴ +a ₃ x ³+(a ₃ +a ₂+1)x ² +a ₃ x+c(1),

and then transforms c₀ (x) into${c_{1}(x)} = {{\frac{1}{c(1)}x^{6}{c_{0}( \frac{1}{x} )}}:}$

${c_{1}(x)} = {x^{6} + {\frac{a_{3}}{c(1)}x^{5}} + {\frac{a_{3} + a_{2} + 1}{c(1)}x^{4}} + {\frac{a_{3}}{c(1)}x^{3}} + {\frac{a_{4} + 1}{c(1)}x^{2}} + \frac{1}{c(1)}}$

such that for each root r_(i) of c₁(x), $1 + \frac{1}{r_{i}}$

is a root of c(x).

Once the system has produced a polynomial with a non-zero coefficient c₅of x⁵, the system (step 106) determines Tr(c₅), where Tr is the trace,or a mapping, of an element of GF(2^(m)) to an element of GF(2). Thetrace of y εGF(2^(m)), which is defined as${{{Tr}(y)} = {\sum\limits_{i = 0}^{m - 1}y^{2^{i}}}},$

is thus equal to 1 or 0.

Every element of GF(2^(m)) is a root of x² ^(m) −x. Each element is thusa root of one of the two factors of x² ^(m) −x, namely,${S(x)} = {\sum\limits_{i = 0}^{m - 1}x^{2^{i}}}$

and S(x)+1, which have no common factors. The trace of an element y isequal to S(y), and the element y is a root of S(x) if Tr(y)=0.Otherwise, the element y has a trace of 1 and is a root of S(x)+1.

There are an even number of roots of the polynomial. The sum of theroots is equal to c₅, and if Tr(c₅)=1, the sum of the traces of theroots is equal to 1. Accordingly, there are an odd number of the rootsof the polynomial are also roots of S(x)+1, and at least one root of thepolynomial that is also a root of S(x). The polynomial can thus befactored into at least a degree one factor and a degree five factor.

Referring still to FIG. 1, the system checks if the trace of c₅ isnon-zero (step 106). If so, the system factors the polynomial, call itc₂(x) (step 107), by determining the greatest common divisors of c₂(x)and each of S(x) and S(x)+1. Preferably, the system, in step 110,determines g(x)=gcd (S(x), c₂(x)) and then, in step 112, determinesh(x)=gcd ((S(x)+1), c₂(x)) as ${h(x)} = {\frac{c_{2}(x)}{g(x)}.}$

The system next determines the roots of the factors (step 114 b) andtransforms the roots into the roots of the error locator polynomial c(x)essentially by reversing the transformation from c(x) to c₂(x) (step118). Alternatively, before determining the roots, the system maycontinue factoring (steps 114, 117) until factors of degree 4 or lessare produced.

If Tr(c₅)=0, the system transforms the polynomial into one in which thetrace of the coefficient of x⁵ is equal to one (step 108). Accordingly,the system selects an element z of GF(2^(m)) for which Tr(z)=1 by, forexample, trying successive powers of α^(i). In the example, the systemtransforms the polynomial c₁(x) into c₂(x) by first defining$\gamma = \frac{a_{5}}{z}$

and then determining c₂(x)=γ⁻⁶c₁(γx): $\begin{matrix}{{c_{2}(x)} = {\gamma^{- 6}\lbrack {{\frac{c_{5}^{6}}{z^{6}}\gamma^{6}x^{6}} + {\frac{c_{5}^{6}}{z^{5}}x^{5}} + {c_{4}\gamma^{4}x^{4}} + {c_{3}\gamma^{3}x^{3}} + {c_{2}\gamma^{2}x^{3}} + {c_{1}\gamma \quad x} + c_{0}} \rbrack}} \\{= {x^{6} + {zx}^{5} + {c_{4}^{\prime}x^{4}} + {c_{3}^{\prime}x^{3}} + {c_{2}^{\prime}x^{2}} + {c_{1}^{\prime}x} + c_{0}^{\prime}}}\end{matrix}$

where c_(i)′=c_(iγ) ^(i−6) for i=0, 1, . . . , 4, and for each rootr_(i) of c₂(x), γr_(i) is a root of c₁(x). With the coefficient of x⁵ inc₂(x) having a trace of 1, c₂(x) can be factored into g(x) and h(x),with each factor having degree five or less, as discussed above withreference to steps 110-116.

Referring now to FIG. 2, the polynomial S(x) has a degree of 2^(m−1),and determining the greatest common divisor of S(x) and c₂(x) is verytime consuming. To reduce the time involved, the system preferablyproduces (step 202) a residue R(x)≡S(x) mod c₂(x), which necessarily hasa degree that is less than the degree of c₂(x), and then (step 204)determines g(x)=gcd (R(x), c₂(x)) using, for example, the Euclideanalgorithm.

In the example m=4, and GF(2⁴) is generated by x⁴+x+1 with α as aprimitive element. For a degree 6 polynomial

c ₁(x)=x ⁶+α⁹ x ⁵+α¹² x ⁴+α³ x ³+α² x ²+α⁴ x+1

a selected element z=α³ of GF(2⁴) with a trace 1, and${\gamma = {\frac{\alpha^{9}}{\alpha^{3}} = \alpha^{6}}},$

the system produces $\begin{matrix}{{c_{2}(x)} = \quad {\frac{c_{1}( {\gamma \quad x} )}{\gamma^{6}} = \frac{c_{1}( {\alpha^{6}x} )}{\alpha^{6}}}} \\{= \quad {x^{6} + {\alpha^{3}x^{5}} + x^{4} + {\alpha^{13}x^{3}} + {\alpha^{8}x^{2}} + {\alpha^{4}x} + \alpha^{9}}}\end{matrix}$

With S(x)=x⁸+x⁴+x²+x, the residue R(x)=x⁸+x⁴+x²+x mod c₂(x) or

 R(x)=α¹⁰ x ⁵+α⁷ x ⁴+α⁴ x ³+α⁶ x ²+α⁹ x+α ⁷

The system then determines g(x)=gcd(R(x), c₂(x))=x−α¹⁰. The remainingfactor${h(x)} = {\frac{c_{2}(x)}{g(x)} = {x^{5} + {\alpha^{12}x^{4}} + {\alpha^{9}x^{3}} + {\alpha^{11}x^{2}} + {\alpha^{14}x} + {\alpha^{14}.}}}$

The system may then determine the roots of g(x) and h(x), as discussedabove, or it may continue to factor h(x), as discussed below withreference to FIG. 4.

The degree of S(x)=2^(m−1), and the calculation of R(x) in aconventional manner requires 2^(m−1) clock cycles, which is still tootime consuming for many systems. Accordingly, the system preferablydetermines R(x) iteratively, taking advantage of the properties of S(x).

For

c ₂(x)=x ⁶ +c ₅ x ⁵ +c ₄ x ⁴ +c ₃ x ³ +c ₂ x ² +c ₁ x+c ₀,

we define:

θ(x)≡c ₅ x ⁵ +c ₄ x ⁴ +c ₃ x ³ +c ₂ x ² +c ₁ x+c ₀ and x ⁶≡θ(x)mod c₂(x).

Using x⁶ we can calculate x⁸ mod c₂(x)=x²*x⁶=x²θ(x)mod c₂(x). We thendefine

x ⁸ mod c ₂(x)≡θ₃(x)=b _(3,5) x ⁵ +b _(3,4) x ⁴ +b _(3,3) x ³ b _(3,3) x³ +b _(3,2) x ² +b _(3,1) x+b _(3,0)

where the coefficient identifier, for example, “3,5” indicates b_(3,5)is the coefficient of the term x⁵ in θ₃. The coefficients we thus

b_(3,5)=c₅ ³+c₅c₄+c₄c₅+c₃=c₅ ³+c₃

b_(3,4)=c₅ ²c₄+c₅c₃+c₄ ²+c₂

b_(3,3)=c₅ ²c₃+c₅c₂+c₄c₃+c₁

b_(3,2)=c₅ ²c₂+c₅c₁+c₄c₂+c₀

b_(3,1)=c₅ ²c₁+c₅c₀+c₄C₁

b_(3,0)=c₅ ²c₀+c₄c₀

We can also calculate x¹⁰ mod c₂(x) as x²*x⁸=x²θ₃(x)mod c₂(x), anddefine

 x ¹⁰ mod c ₂(x)≡θ*(x)=d ₅ x ⁵ +d ₄ x ⁴ +d ₃ x ³ +d ₂ x ² +d ₁ x+d ₀

where

d₅=(c₅ ²+c₄)b_(3,5)+c₅b_(3,4)+b_(3,3)

d₄=(c₅c₄+c₃)b_(3,5)+c₄b_(3,4)+b_(3,2)

d₃=(c₅c₃+c₂)b_(3,5)+c₃b_(3,4)+b_(3,1)

d₂=(c₅c₂+c₁)b_(3,5)+c₂b_(3,4)+b_(3,0)

d₁=(c₅c₁+c₀)b_(3,5)+c₁b_(3,4)

d₀=(c₅c₀)b_(3,5)+c₀b_(3,4)

Then, based on θ(x), θ₃(x) and θ*(x), the system can iterativelycalculate, in m−4 iterations, θ_(i)(x)≡x² ^(i) mod c₂(x) for i=4,5, . .. m−1, as $\begin{matrix}{{x^{2^{i}} \equiv \quad {{\theta_{i}(x)}\quad {mod}\quad {c_{2}(x)}}} = {{b_{i,5}x^{5}} + {b_{i,4}x^{4}\quad \ldots} + {b_{i,1}x} + b_{i,0}}} \\{= \quad {{b_{{i - 1},5}^{2}{\theta_{*}(x)}} + {b_{{i - 1},4}^{2}{\theta_{3}(x)}} + {b_{{i - 1},3}^{2}{\theta (x)}} + {b_{{i - 1},2}^{2}x^{4}} +}} \\{\quad {{b_{{i - 1},1}^{2}x^{2}} + b_{{i - 1},0}^{2}}}\end{matrix}$

Adding the θ_(i)(x) terms and the terms for k=0, 1 and 2, the residueis:${R(x)} = {x + x^{2} + x^{4} + {\sum\limits_{i = 3}^{m - 1}{\Theta_{i}(x)}}}$

The mod c₂(x) operation is calculated with θ(x), θ₃(x) and θ*(x) becausethe highest degree term at the completion of an iteration is degree 5,which in a next iteration is squared to degree 10 term.

FIG. 3 depicts a circuit 300 for iteratively calculating thecoefficients R₁, R₂ . . . R₅ of R(x) for a degree 6 error locatorpolynomial. Registers 303-307 are initialized with R₁, R₂ and R₄ set to1 and R₃ and R₅ set to zero. The set of multipliers 310-312 contain thecoefficients d₅, b_(3,5) and c₅, respectively, that are associated withthe x⁵ term in each of the polynomials θ(x), θ₃(x) and θ*(x). Theremaining sets of multipliers 318-320, 322-324, 326-328 and 330-332contain, respectively, the coefficients associated with the x⁴, x³, x²,x¹ and x⁰ terms in each of the polynomials θ*(x), θ₃(x) and θ(x).

The registers 360 ₅, 360 ₄, 360 ₃, 360 ₂, 360 ₁, and 360 ₀ are initiallyset to the coefficients of the associated terms of θ₃(x) which are,respectively, the coefficients line break b_(i−1,5) . . . b_(i−1,0) forthe iteration i=4. These registers are then updated in each iteration,and the updated values are added to the contents of the registers303-307. The sums then update the registers 303 and 307. After m−3iterations, the registers 303-307 contain the coefficients of theresidue R(x).

More specifically, during a first iteration the contents of theregisters 360 _(j), are each squared in multipliers 362. The product(b_(3,5))² is supplied over line 380 to the multipliers 310, 314, 318,322, 326 and 330 to produce the coefficients of (b_(i−1,5))²θ*(x). Atthe same time the product (b_(3,4))² is supplied over line 382 tomultipliers 311, 315, 319, 323, 327 and 331 to produce the coefficientsof (b_(i−1,4))²θ₃(x) and the product (b_(3,3))² is supplied over line384 to the multipliers 312, 316, 320, 324, 328 and 332 to produce thecoefficients of (b_(i−1,3))²θ(x). The products (b_(3,2))², (b_(3,1))²and (b_(3,0))² are, respectively, supplied to adders 344, 350 and 356which are associated with the coefficients of x⁴x² and x⁰. The adders340, 342, 344, 346, 348, 350, 352 and 354 then add the associatedproducts, and the sums are next added to various products and sums inadders 341, 343, 347, 349, 353 and 355, with the sum produced by theadder 355 added to the product (b_(3,0))² in an adder 356. The sumsupdate the contents of the registers 360 _(j) as the coefficients b_(4j)required for the next iteration, and the updated coefficients are thenadded, respectively, to the contents of the registers 302-307, toproduce the updated coefficients of R(x) for the current iteration.

The circuit 300 iteratively updates the coefficients of R(x) for theremaining clock cycles i=5, 6 . . . m−1 . . . m−1. Accordingly, theresidue R(x) is calculated in m−3 clock cycles after θ*(x), θ₃(x) andθ(x) are determined. If conventional circuits are used to produce θ*(x),θ₃(x) and θ(x), the residue R(x) is calculated in approximately m+14clock cycles rather than the 2^(m−1) clock cycles required by knownprior systems. The current system then determines g(x)=gcd (R(x), c₂(x))in a conventional manner, and produces the associated roots of g(x) andh(x) as discussed above.

For systems that can correct more errors, the circuit 300 containsadditional registers and associated multipliers and adders that includein the iterations the coefficients of additional polynomials θ₄(x),θ₅(x) . . . , θ_(u)(x), and θ*_(i), θ*_(i+1) . . . that correspond tox^(t), x^(t+2) . . . x^(2(t−1)), where u=┌ln t┐.

For example, a system that corrects up to 10 errors defines

x ¹⁰≡θ(x)=c ₉ x ⁹ +c ₈ x ⁸ + . . . +c ₀

and then calculates

x¹²=x²x¹⁰ mod c(x)=x²θ(x)≡θ*₁(x)

x¹⁴=x²x¹² mod c(x)=x²θ*₁(x)≡θ*₂

x¹⁶=x^(u)=x²x¹²≡θ₄(x)

x¹⁸=x^(2(t−1))=x²x¹⁶≡θ*₃

Based on these polynomials the system can iteratively determine θ_(k)mod c(x) for k=u,u+1 . . . m−1. Accordingly, the set of multipliersassociated with each register 360 _(j) in the circuit for iterativelygenerating the coefficients of the residue includes the appropriatecoefficients of the polynomials θ(x), θ*₁(x), θ*₂(x), θ*₄(x) and θ*₃(x)and produces the coefficients of:${R(x)} = {x + x^{2} + x^{4} + x^{8} + {\sum\limits_{i = 4}^{m - 1}{\theta_{i}(x)}}}$

B. Odd-degree Error Locator Polynomial

Referring now to FIG. 4, if the degree of the error locator polynomialis odd (step 400), the system determines the roots using a dual basisβ₀, β₁ . . . β_(m−1) over GF(2) rather than in the basis α⁰, α¹ . . .α^(m−1). In the dual basis, $\begin{matrix}{{{Tr}( {\alpha^{i}\beta_{j}} )} = {{0\quad {if}\quad i} \neq j}} \\{= {{1\quad {if}\quad i} = j}}\end{matrix}$

The roots are then:

r _(q) =r _(q,0)β₀ +r _(q,1)β₁ +r _(q,2)β₂ + . . . +r _(q,m−1)β_(m−1)

for q=1, . . . t, and r_(qj)εGF(2) for j=0 . . . , m−1, and${{Tr}( {\alpha^{i}r_{q}} )} = {{\sum\limits_{k = 0}^{m - 1}{r_{q,k}{{Tr}( {\alpha^{i}\beta_{k}} )}}} = {r_{q,j}.}}$

For t distinct roots, there exists a k₀ such that r_(i,k), r_(2,k) . . .r_(n,k) are not all ones or all zeros, and thus, there are two rootsr_(i) ₁ and r_(i) ₂ out of the set of roots r_(i) such that r_(i) ₁ ,_(k) ₀ =1 and r_(i) ₂ , _(k) ₀ =0. The traces of α^(k) ^(₀) r_(i) ₁ andα^(k) ^(₀) r_(i) ₂ are then 1 and 0, which means that g(x)=gcd(S(α^(i)x), c(x)) has degree of t−1 or less, as does h(x)=gcd(S(α^(i)x)+1, c(x)). The system must, however, determine if g(x) is anon-trivial factor of c(x) to determine if c(x) can be factored.

Referring still to FIG. 4, the system (step 402) determines a residuewhich is now R_(i)(x)≡S(α^(i)x)mod c(x). If R_(i)(x)=0, c(x) dividesS(α^(i)x), and S(α^(i)x)+1 and c(x) have no common divisor. IfR_(i)(x)=a, where a is a non-zero element of GF(2^(m)), c(x) dividesS(α^(i)x)+1, and S(α^(i)x) and c(x) have no common divisor. Thus, ineither of these cases g(x) is a trivial factor of c(x). If, however,R_(i)(x) has degree≧1, there exists a polynomial p_(i)(x) such that

S(α^(i) x)=R _(i)(x)+c(x)p _(i)(x)

and c(x) divides neither S(α^(i)x) nor S(α^(i)x)+1. Accordingly, g(x) isa non-trivial factor of c(x).

For R_(i)(x) to have degree one or greater, the coefficients of theterms x^(t−1), x^(t−2), . . . , x cannot all be zeros. For

R _(i)(x)=R _(i,t−1) x ^(t−1) + . . . +R _(i,1) x+R _(i,0)

the vector (R_(i,t−1), . . . R_(i,1)) thus cannot equal the all 0 vectorof R_(i)(x), the system uses the polynomials θ(x), θ₃(x) and so forthdiscussed above. As an example, for a degree 5 polynomial

c(x)=c ₅ x ⁵ +c ₄ x ⁴ +c ₃ x ³ +c ₂ x ² +c ₁ x+c ₀

 x ⁶≡θ(x)mod c(x)=v ₄ x ⁴ +v ₃ x ³ +v ₂ x ² +v ₁ x+v ₀

where

v₄=c₄ ²+c₃

v₃=c₄c₃+c₂

v₂=c₄c₂+c₁

v₁=c₄c₁+c₀

V₀=c₄c₀

and

x ⁸≡θ₃(x)=x ²θ(x)mod c(x)=b_(3,4) x ⁴ +b _(3,3) x ³ +b _(3,2) x ² +b_(3,1) x+b _(3,1)

where

b_(3,4)=b₄ ²+c₄b₃+b₂

b_(3,3)=b₄b₃+c₃b₃+b₁

b_(3,2)=b₄b₂+c₂b₃+b₀

b_(3,1)=b₄b₁+c₁b₃+

b_(3,0)=b₄b₀+c₀b₃

There is no need to calculate θ*(x) because the highest degree periteration is x⁸. Accordingly, the system determines θ_(k)(x)≡x² ^(k) modc(x) for k=4, 5, . . . , m−1 as follows:

θ_(k)(x)=b _(k,4) x ⁴ +b _(k,3) x ³ +b _(k,2) x ² +b _(k,1) x+b _(k,1)=b ² _(k−1,4)θ₃(x)+b ² _(k−1,3)θ(x)+b ² _(k−1,2) x ⁴ +b ² _(k−1,1) x ²+b ² _(k−1,0)

Also, there exists a polynomial p_(k)(x) such that$x^{2^{k}} = {{\sum\limits_{j = 0}^{t - 1}{b_{k,j}x^{j}}} + {{c(x)}{p_{k}(x)}}}$

Generalizing,$( {\alpha^{i}x} )^{2^{k}} = {{\alpha^{2^{k_{i}}}( {\sum\limits_{j = 0}^{t - 1}{b_{k,j_{1}}x^{j}}} )} + {\alpha^{2^{k_{i}}}{c(x)}{p_{k}(x)}}}$

for i=0, 1 . . . m−1, which implies that$( {\alpha^{i}x} )^{2^{k}} \equiv {\sum\limits_{i = 0}^{t - 1}{\alpha^{2^{k_{i}}}b_{k,j}x^{j}\quad {mod}\quad {c(x)}}}$

and, therefore,${R_{i}(x)} = {{{\alpha^{i}x} + {\alpha^{2i}x^{2}} + {\alpha^{4i}x^{4}} + {\sum\limits_{k = 3}^{m - 1}{\sum\limits_{j = 0}^{t - 1}{\alpha^{2^{k_{i}}}b_{k,j}x^{j}}}}} \equiv {{S( {\alpha^{i}x} )}\quad {mod}\quad {c(x)}}}$or$R_{i,4} = {\alpha^{4i} + {\sum\limits_{k = 3}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,4}}}}$$R_{i,3} = {\sum\limits_{k = 3}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,3}}}$$R_{i,2} = {\alpha^{2i} + {\sum\limits_{k = 3}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,2}}}}$$R_{i,1} = {\alpha^{i} + {\sum\limits_{k = 3}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,1}}}}$

The system determines the set of coefficients for i=0, . . . m−1 andselects a value of i for which at least one of the coefficients is nonzero (step 404). The system then determines the greatest common divisorof R_(i)(x) and c(x) and so forth (steps 406-412).

The coefficients b_(k,j) can be determined iteratively. Referring now toFIG. 5, sets of multipliers 602-603, 604-605, 606-607, 608-609 and610-611 multiply the products of b² _(i−1,4) by the coefficients ofθ₃(x) and θ(x). The products are then summed in adders 612 _(j) j=0 tot−1 and the sums associated with x⁴, x² and x are added to the productsb² _(i,2), b² _(i,1) and b² _(i,0) in adders 614 ₄, 614 ₂ and 614,respectively. The sums produced by these adders and the sums produced bythe adders 612 ₃ and 612, update the registers 616_(j); that hold thecoefficients b_(i,j) for i=4, 5, . . . m−1. At the end of m−3iterations, the registers 616 _(j) hold the coefficients of x² ^(i) modc(x).

The system may instead determine a residue R_(i)(x) with degree greaterthan or equal to 1 by testing for R_(k,1)=1 for k=0, . . . , m−1. ForR_(k,1)=1, the system then determines the remaining coefficients ofR_(k)(x) using the iterative method, and calculates g(x) and the rootsof g(x) as discussed above.

For a non-trivial g(x), that is, for an R_(i)(x) with degree≧1, thereexists at least one coefficient R_(k,1)≠0 for k=0, 1 . . . m−u, whereu=┌ln t┐. Consider the polynomial S(α^(i)x)=R_(i)(x)+c(x,q(x), which inthe example has degree 8, and a c(x) with degree 5 and c₅=1. Thepolynomial q(x) thus has degree 8, with

S(x)=(α^(i) x)⁸+(α^(i) x)⁴+(α^(i) x)²+α^(i) x and q(x)=α^(8i) x ³ +p_(i)(x),

and p_(i)(x) has degree ≦2. This means thatp(x)=p_(i,2)x²+p_(i,1)x+p_(i,0) and we can determine the coefficients ofp_(i)(x) for i=0:

p _(0,2) =a ₄ ; p _(0,1) =a ₃ +a ₄ ² ; p _(0,0) =a ₄ ³ +a ₂

and

R _(0,1) =P _(0,1) a ⁰ +P _(0,0) a ₁

For i=1, the coefficients are:

p_(1,2)=α⁸a₄=α⁸p_(0,2)

p_(1,1)=α⁸(a₃+α² ₄)=α⁸p_(0,1)

p_(1,0)=α⁸(a₂+α³ ₄)=α⁸p_(0,0)

and

R_(1,1)=p_(1,1)a₀+p_(1,0)a₁+α

If the two coefficients R_(0,1) and R_(1,1) are equal,

 α=p_(1, 1) a ₀ +p _(1, 0) a ₁=α⁸(p ₀₁ a ₀ +p _(0,0) a ₁)=α⁸

which contradicts the fact that α is a primitive element of GF(2^(m)).Accordingly, R_(0,1)≠R_(1,1) and one of the coefficients is equal to 1while the other is equal to 0. In the example, the system tests R_(i,1)for i=0 and 1, that is, it tests to m−3, and selects for the value of ithe first value for which R_(i,1)=1.

Referring now to FIG. 6, the system (step 600) determines R_(i)(x) withdegree ≧1 by first calculating

θ_(k)(x)=b _(k,4) x ⁴ +b _(k,3) x ³ +b _(k,2) x ² +b _(k,1) x+b _(k,0)

for k=u, u+1, . . . m−1 using the iterative method described above.

The system (step 602) then starts from i=0 and determines:$R_{i,1} = {{\sum\limits_{k = u}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,1}}} + \alpha^{i}}$

If R_(i,1)≠0, the system computes R_(i)(x) and determinesg(x)=gcd(R_(i)(x), c(x)) as discussed above (steps 604,606). The systemthen determines (steps 608-610) the roots of g(x) and h(x). IfR_(i,1)=0, the system lets i=i+1 (step 605), and again determines ifR_(i,1)≠0. Once R_(i,1)≠0, the system determines g(x) and h(x) and theassociated roots (steps 604, 606-610). The system thus determines theroots of c(x) in far fewer clock cycles than the known prior systems,which use the Chien search, and thus, try as the roots of c(x) all ofthe elements of GF(2^(m)).

After the system determines a residue and factors the polynomial usingeither the odd-degree or even-degree operations discussed above, thesystem uses these operations as appropriate, to continue factoring, forexample, g(x) and h(x), and factors that result from the furtherfactoring.

What is claimed is:
 1. A method for determining which symbols in a codeword contain errors based on a degree-t error locator polynomial overGF(2^(m)), with t even and greater than or equal to six, the methodincluding the steps of: A. determining if a coefficient a_(t−1) ofx^(t−1) of a t-degree error locator polynomial is non-zero and if nottransforming the polynomial into one in which a_(t−1)≠0; B. determiningif Tr(a_(t−1))=1, and if not transforming the polynomial into one whichTr(a_(t−1))=1, where c₂(x) is the polynomial with Tr(a_(t−1))=1; C.factoring the polynomial into${g(x)} = {{\gcd ( {{{S(x)} = {\sum\limits_{i = 0}^{m - 1}x^{2^{\prime}}}},{c_{2}(x)}} )}\quad {and}}$h(x) = gcd (S(x) + 1, c₂(x));

D. determining roots of g(x) and h(x); E. transforming the roots intothe roots of the t-degree error locator polynomial; and F. determiningwhich symbols in a code word are erroneous by associating the roots ofthe t-degree error locator polynomial with symbols in the code word. 2.The method of claim 1 further including the step of determining if thedegrees of g(x) and h(x) are greater than a predetermined maximum and ifso factoring either or both of g(x) and h(x) into factors with degreesthat are less than or equal to the predetermined maximum.
 3. The methodof claim 1 wherein the step of factoring c₂(x) includes i. determining aresidue R(x)≡S(x)mod c₂(x), ii. determining g(x) as the greatest commondivisor of c₂(x) and R(x), and iii. determining h(x) as$\frac{c_{2}(x)}{g(x)}.$


4. The method of claim 3 wherein the step of determining the residueincludes the steps of: a. for c ₂(x)=x ^(t) +c _(t−1) x ^(t−1) +c _(t−2)x ^(t−2) + . . . +c ₁ x+c ₀, definingθ(x)≡c_(t−1)x^(t−1)+c_(t−2)x^(t−2)+ . . . +c₁x+c₀ and x^(t)≡θ(x)modc₂(x), b. calculating x^(t+2) mod c₂(x)=x²*x^(t)=x²θ(x)mod c₂(x) anditeratively calculating x^(t+2k) mod c₂(x) for k=2, 3 . . . , 2(t−1) asx² multiplied by the polynomial x^(t+(2k−1)) mod c₂(x), where aniteration produces a polynomial θ_(s) _(t+2) . . . θ_(s) _(2(t−1))associated with x^(t+2), . . . x^(2(t−1)) c. calculating θ_(i)(x)≡x²^(i) mod c₂(x) for i=u,u+1, . . . m−1, as b _(i,t−1) x ^(t−1) +b_(i,t−2) x ^(t−2) . . . +b _(i,1) x+b _(i,0) =b ² _(i−1,t−1)θ_(s)_(2(t−1)) (x)+ . . . +b ² _(i−1,u)θ_(s) _(t) (x)+b ² _(i−1,u−1) x^(2(u−1)) + . . . +b ² _(i−1,1) x ² +b ² _(i−1,0) where u=┌ln t┐, b'sare coefficients of a polynomial calculated in step b for x^(u), and d.${R(x)} = {x^{2^{0}} + x^{2^{1}} + x^{2^{2}} + \ldots + {x^{2^{u}}{\sum\limits_{i = 3}^{m - 1}{{\Theta_{i}(x)}.}}}}$


5. A method for determining which symbols in a code word contain errorsbased on a degree-t error locator polynomial c(x) over GF(2^(m)), with todd and greater than or equal to five, the method including the stepsof: A. determining residues R_(i)(x)≡S(α^(i)x)mod c(x) for i=0, 1, . . ., m−1 and selecting a residue with degree greater than or equal to one,where ${{S(x)} = {\sum\limits_{i = 0}^{m - 1}x^{2^{i}}}};$

B. determining g(x)=gcd (c(x), R_(i)(x)) and${{h(x)} = \frac{c(x)}{g(x)}};$

C. determining roots of g(x) and h(x); and D. determining which symbolsin a code word are erroneous by associating the roots with symbols ofthe code word.
 6. The method of claim 5 further including the step ofdetermining if the degrees of g(x) and h(x) are greater than apredetermined maximum and if so factoring either or both of g(x) andh(x) into factors with degrees that are less than or equal to thepredetermined maximum.
 7. The method of claim 5 including in the step ofdetermining residues the steps of: a. for c ₂(x)=x ^(t) +c _(t−1) x^(t−1) +c _(t−2) x ^(t−2) + . . . +c ₁ x+c ₀, definingθ(x)≡c_(t−1)x^(t−1)+c_(t−2)x^(t−2)+ . . . +c₁x+c₀ and x^(t)≡θ(x)modc₂(x), b. calculating x^(t+2) mod c₂(x)=x²*x^(t)=x²θ(x)mod c₂(x) anditeratively calculating x^(t+2k) mod c₂(x) for k=2, 3 . . . , 2(t−1) asx² multiplied by the polynomial x^(t+(2k−1)) mod c₂(x), where aniteration produces a polynomial θ_(s) _(t+2) (x), θ_(s) _(t+3) (x) . . .θ_(s) _(2(t−1)) associated with x^(t), x^(t+2), . . . x^(2(t−1)) c.calculating θ_(i)(x)≡x² ^(i) mod c₂(x) for i=u,u+1, . . . m−1, as b_(i,t−1) x ^(t−1) +b _(i,t−2) x ^(t−2) . . . +b _(i,1) x+b _(i,0) =b ²_(i−1,t−1)θ_(s) _(2(t−1)) (x)+ . . . +b ² _(i−1,u)θ_(s) _(t) (x)+b ²_(i−1,u−1) x ^(2(u−1)) + . . . +b ² _(i−1,1) x ² +b ² _(i−1,0) whereu=┌ln t┐ and b's are coefficients of a polynomial calculated in step bfor x^(u), and d. $\begin{matrix}{{R_{i}(x)} = \quad {{\alpha^{i}x} + {\alpha^{2i}x^{2}} + \ldots + {\alpha^{ui}x^{u}} +}} \\{\quad {{\sum\limits_{k = u}^{m - 1}{\sum\limits_{j = 0}^{t - 1}{\alpha^{2^{k_{i}}}b_{k,j}x^{j}}}} \equiv {{S( {\alpha^{i}x} )}\quad {mod}\quad {{c(x)}.}}}}\end{matrix}$


8. The method of claim 5 including in the step of determining residuesthe steps of: a. for c ₂(x)=x ^(t) +c _(t−1) x ^(t−1) +c _(t−2) x^(t−2) + . . . +c ₁ x+c ₀, defining θ(x)≡c_(t−1)x^(t−1)+c_(t−2)x^(t−2)+. . . +c₁x+c₀and x^(t)≡θ(x)mod c₂(x), b. calculating x^(t+2) modc₂(x)=x²*x^(t)=x²θ(x)mod c₂(x) and iteratively calculating x^(t+2k) modc₂(x) for k=2, 3 . . . , 2(t−1) as x² multiplied by the polynomialx^(t(2k−1))mod c₂(x), where an iteration produces a polynomial θ_(s)_(t+2) (x), θ_(s) _(t+3) . . . θ_(s) _(t−1) associated with x^(t),x^(t+2), . . . x^(2(t−1)) c. calculating θ_(i)(x)≡x² ^(i) mod c₂(x) fori=u,u+1, . . . m−1, as b _(i,t−1) x ^(t−1) +b _(i,t−2) x ^(t−2) . . . +b_(i,1) x+b _(i,0) =b ² _(i−1,t−1)θ_(s) _(2(t−1)) (x)+b ² _(i−1,t−2)θ_(s)_(t) (x)+ . . . + b ² _(i−1,u)θ(x)+b ² _(i−1,u−1) x ^(2(u−1)) + . . . +b² _(i−1,1) x ² +b ² _(i−1,0) where u=┌ln t┐ and b's are coefficients ofa polynomial calculated in step b for x^(u), and d. for i=0,determining:$R_{i,1} = {{\sum\limits_{k = u}^{m - 1}{\alpha^{2^{k_{i}}}b_{k,1}}} + \alpha^{i}}$

and if R_(i,1)=1, calculating the remaining coefficients of R_(i)(x), orif R_(i,1)=0 setting i=i+1 and repeating for i≦m−1.